#include "ImageGray.h"
#include "ImageRgb.h"


using namespace Torch;

class Contraste
{

public:
	int* LUT;
	
	char* file_name;	
	ImageGray *image;
	
	
	Contraste(char *file_name);

	~Contraste();	
		
	/*
	*dessine l'histogramme de l'image img dans le fichier file_name
	*
	*/		
	void drawHistogramme(ImageGray *img, char* file_name);
	
	/*
	*modifie la  valeur des pixels de l'image
	*/
	void modifyImage(ImageGray *img);

	/*
	*sauvegarde l'image img dans le fichier file_name
	*/
	void saveImage(ImageGray *img, char* file_name);

	/*
	*initiaise la LUT en augmentant la valeur des pixels compris entre les points 
	*(x1,y1) et (x2,y2)
	*/
	int* initLUT(int x1, int y1, int x2, int y2,int x3, int y3, int x4, int y4,int nbarg);

	/*
	*file name represente le nom du fichier, x1 et y1 sont les coordonnees du point 1 
	*x2 et y2 celles du point 2 . nbarg designe le nombre d'arguments
	*arg est la donnees prise en entree
	*/
	 static char* readData(char**arg, char*file,int*x1,int*y1,int*x2,int*y2,int*x3,int*y3,int*x4,int*y4,int nbarg);
	
	/*
	*dessine la fonction de transformation nbargc designe le nombre d'arguments
	*
	*/
	void drawFunction(char* func_name, int x1, int y1, int x2, int y2,int x3, int y3, int x4, int y4,int nbargc);
	
	/*
	*Calcule la nouvelle ordonnee du point d'abscice drapeau 
	*valeur des pixels entre les points de coordonnees (x1,y1) et (x2,y2)
	* cette valeur est renvoyer en retour
	*/
	int computeValue(int x1,int y1,int x2,int y2,int drapeau);
	
	/*
	*dessine un repere orthonorme  sur l'imaage
	*/
	void graduateImage(Image *img);
	
	/*
	*rend l'arrier plan de l'image img blanc
	*/
	void setWhiteBackgroud(ImageRgb *img);
	
	/*
	*renvoie la longueur de lachaine prise en entree 
	*
	*/
	int longueur(char* chaine);

	/*
	* renvoie un nom constitue d'une partie de oldname et de nouveau
	*
	*/
	char* newName(char*oldname,char*nouveau);
	
};

